package com.ruoyi.crypto.utils;

import cn.hutool.crypto.SmUtil;
import cn.hutool.crypto.symmetric.SM4;
import com.ruoyi.crypto.config.SmCryptoConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import cn.hutool.crypto.SecureUtil;

import java.nio.charset.StandardCharsets;


/**
 * SM2加解密工具类（基于Hutool实现）
 */
@Component
public class SMUtils {

    @Autowired
    private SmCryptoConfig smCryptoConfig;



    public SMUtils(SmCryptoConfig smCryptoConfig) {
        this.smCryptoConfig = smCryptoConfig;
    }

    /**
     * 使用配置中的密钥加密为 Base64
     */
    public String encrypt(String data) {
        if (data == null) return null;
        SM4 sm4 = SmUtil.sm4(smCryptoConfig.getPrivateKey().getBytes(StandardCharsets.UTF_8));
        return sm4.encryptBase64(data);
    }

    /**
     * 使用指定密钥加密
     */
    public String encrypt(String data, String key) {
        if (key == null || key.length() != 16) {
            throw new IllegalArgumentException("SM4 密钥必须是 16 字节");
        }
        SM4 sm4 = SmUtil.sm4(key.getBytes(StandardCharsets.UTF_8));
        return sm4.encryptBase64(data);
    }

    /**
     * 使用配置中的密钥解密 Base64 数据
     */
    public String decrypt(String cipherText) {
        if (cipherText == null) return null;
        SM4 sm4 = SmUtil.sm4(smCryptoConfig.getPrivateKey().getBytes(StandardCharsets.UTF_8));
        return sm4.decryptStr(cipherText);
    }

    /**
     * 使用指定密钥解密
     */
    public String decrypt(String cipherText, String key) {
        if (key == null || key.length() != 16) {
            throw new IllegalArgumentException("SM4 密钥必须是 16 字节");
        }
        SM4 sm4 = SmUtil.sm4(key.getBytes(StandardCharsets.UTF_8));
        return sm4.decryptStr(cipherText);
    }
}
